Netflix Pseudo Localization 偽本地化實踐方案

過去 8 年間,Netflix 從一個僅支援英語的產品,逐步發展為支援 26 種語言、服務於全球 190 個國家和地區的國際化平臺。隨著語言支援的持續擴充套件,可擴充套件的全球化解決方案(Globalization at scale)變得尤為關鍵。

問題背景:語言擴充套件導致的 UI 崩潰 The problem

在語言本地化測試中發現的大多數 UI 問題,都源於翻譯造成的文字膨脹(Expansion)。翻譯後的文字長度可比英文長出 40%,德語、希伯來語、波蘭語、芬蘭語和葡萄牙語等語言尤為突出。

英文原文:“Don’t miss out.”

德語翻譯:“Lassen Sie sich nichts entgehen!”

翻譯後不僅字數變長,而且在 UI 中直接導致排版溢位,破壞介面。

這些問題的根源在於:初始設計以英文為基準,未考慮多語言適配。當產品支援 26 種語言時,相同的問題就會出現 26 次,嚴重影響效率。而其實這些問題本可在英文設計階段就被避免。

解決方案:偽本地化The solution — Pseudo Localization

偽本地化是一種模擬翻譯效果的技術,無需真實翻譯就能發現 UI 問題,幫助開發者在設計早期進行多語言適配測試。

偽本地化具有三大功能:

1 邊界標記([ ])

方括號 是提醒用的,它們包住整句話,開發人員看到後就知道這是“偽本地化”過的。如果介面裡看不到這兩個符號,說明文字可能被裁掉了。

2 字元變形

這些奇怪的字母是故意換的,將 ASCII 字元替換為“擴充套件字元”,以測試字型支援、行高限制和文字是否外部化;像“f”變成“ƒ”,“e”變成“é”,是為了測試字型、行間距、系統能不能正常顯示這些字元。

3 文字填充

透過加入 “one two three...” 這些是假裝文字變長,但會跳過 synopsis、標題等已做長度限制的欄位。
模擬其他語言翻譯後的長度增長。

例如:

UI 顯示“Find Help Online”經過偽本地化後變為:

[ƒîกี้ð Ĥéļþ Öกี้ļîกี้é one two]

4 針對常見40個國家或地區的英文翻譯成目標語言後,字元長度預計增加比例的參考表

國家/地區(語言)翻譯後長度變化(相對英文)說明
德語(德國)+30% ~ +35%(最高可達 +40%)德語單詞較長,尤其是複合詞 (Kwintessential)
法語(法國)+15% ~ +20%平均擴充套件顯著 (Kwintessential,Version Internationale)
西班牙語(西班牙)+15% ~ +30%通用文字擴充套件較明顯 (Kwintessential,Morning Trans)
葡萄牙語(巴西 / 葡萄牙)+15% ~ +30%與西班牙類似 (Kwintessential)
義大利語(義大利)+10% ~ +25%中等幅度擴充套件 (Kwintessential)
俄語(俄羅斯)+15% ~ +20%屬於較高擴充套件範疇 (JR Language)
荷蘭語(荷蘭)+30% ~ +35%句子結構類似德語,擴充套件幅度大 (LingoPort,Phrase)
瑞典語(瑞典)變化不大或略縮短可能與英文接近或略短 (JR Language)
波蘭語(波蘭)+20% ~ +30%常見東歐語言擴充套件比例 (JR Language)
匈牙利語(匈牙利)中等幅度,約 +20%複雜構詞,可能略長 (tcworld magazine)
希臘語(希臘)+10% ~ +15%中等擴充套件 (Andiamo! The Language Professionals)
阿拉伯語(多個國家)+20% ~ +25%拆分英語縮寫等導致擴充套件 (Andiamo! The Language Professionals,JR Language)
希伯來語(以色列)±20% ~ +30%方向反轉空間變化需注意 (JR Language)
印地語(印度)+15% ~ +35%擴充套件幅度大,視具體表達而變 (Andiamo! The Language Professionals)
烏克蘭語(烏克蘭)+15% ~ +20%中等擴充套件 (JR Language)
克羅埃西亞語(克羅埃西亞)+15% ~ +20%東歐語言常見擴充套件值 (Andiamo! The Language Professionals)
捷克語(捷克)+10% ~ +15%中度擴充套件 (Andiamo! The Language Professionals)
丹麥語(丹麥)-10% ~ -15%(略收縮)翻譯後可能比英文短 (JR Language)
芬蘭語(芬蘭)-25% ~ -30%(顯著縮短)合詞較多,詞長變短 (Andiamo! The Language Professionals)
日語(日本)-10% ~ -55%(字元數量少)字數減少但需要更多排版空間 (Andiamo! The Language Professionals,w3.org)
韓語(韓國)-10% ~ -15%(略縮短)同樣字元複雜度高 (Andiamo! The Language Professionals)
中文(中國)視情況縮短,但垂直空間需更多一字概念多,但排版空間不小 (tcworld magazine,w3.org)
泰語(泰國)+15%(略增)東南亞語言擴充套件率適中 (JR Language)
羅馬尼亞語(羅馬尼亞)+15% ~ +20%適中擴充套件 (Andiamo! The Language Professionals)
土耳其語(土耳其)+15% ~ +20%中度擴充套件 (Andiamo! The Language Professionals)
希臘語(希臘)同上同上
斯洛伐克語(斯洛伐克)+10% ~ +15%東歐中級擴充套件 (Andiamo! The Language Professionals)
保加利亞語(保加利亞)+15% ~ +20%類似東歐擴充套件幅度 (Andiamo! The Language Professionals)
立陶宛語(立陶宛)+10% ~ +15%中等範圍擴充套件
拉脫維亞語(拉脫維亞)+10% ~ +15%同上
斯洛維尼亞語(斯洛維尼亞)+10% ~ +15%中等擴充套件
愛沙尼亞語(愛沙尼亞)+10% ~ +15%類似北歐語言 (fabsk.eu)
土庫曼語(土庫曼)+10% ~ +20%語族結構類似擴充套件適中
泰米爾語(印度)+15% ~ +25%非拉丁文字擴充套件適中
烏爾都語(巴基斯坦)+10% ~ +20%較適中擴充套件
波斯語(伊朗)+15% ~ +20%波斯文擴充套件適中
阿姆哈拉語(衣索比亞)+15% ~ +25%發音文字擴充套件適中
斯瓦希里語(東非)+10% ~ +20%語法結構影響長度
挪威語(挪威)-5% ~ -10%(略縮)北歐語言略短 (JR Language)
荷蘭語(荷蘭)同上同上

Netflix 的技術架構支援 Under the Hood

Netflix 有一個專門的“雲端字串倉庫”(Global String Repository),所有介面上的文字內容(比如按鈕上的字、提示資訊等)都是從這個倉庫裡來的。

他們的做法是這樣的:

每當系統需要一段文字時,先對這段文字做“偽本地化處理”——也就是故意變成長、加奇怪字元、加括號……這樣開發人員就能看到哪些地方排版可能出問題。

處理完之後,這些“假翻譯”的文字才會顯示到開發者的介面上。這個系統叫 NFi18n(Netflix 國際化庫),其他的 Netflix 服務也可以透過介面(API)使用它。

優點是什麼?

這個方法可以應用到所有平臺(網頁、App、電視端等),不管介面是在哪個平臺上都能用一套方法測試“翻譯後是否會出問題”。

面臨的挑戰是什麼?

雖然大部分文字都能從這個“文字倉庫”裡統一管理,但還有一些文字不在倉庫裡,比如:

這些資訊來自不同的系統,不是統一的,所以 Netflix 還得花時間調查這些文字是從哪裡來的、在哪個時機可以對它們做偽本地化處理。

為什麼要這麼做?

因為如果只偽本地化了介面上的按鈕、標題,而電影的名字和簡介還是英文,整個平臺的體驗看起來就半中半英,很不完整。

推廣偽本地化的關鍵策略Implementation was only half the battle

工具本身不是難點,難點在於如何推動所有 UI 開發團隊實際使用。

Netflix 團隊採取了以下做法:

此策略要求開發者徹底改變日常開發方式,但結果非常積極。很多之前需等翻譯完成才發現的排版問題,如今在開發階段就被發現並修復,一次修好,避免多語種重複修復。

反饋與最佳化方向What’s next?

在工具上線 6 周後,他們給所有開發者發了問卷,想了解大家的使用體驗。問題包括:

開發者最關心的問題是 “可讀性”。雖然偽本地化保留了一定的英文原意,但加了太多奇怪字元和“one two three...”這樣的模擬擴充套件內容,看起來太亂,不好讀。所以 Netflix 準備調整規則,例如用重複母音的方式(eeee、oooo)來模擬文字變長,既保留功能性,又不太乾擾閱讀。

舉個例子:

偽本地化是一種在還沒翻譯前就能“預演”多語言介面效果的好方法。Netflix 讓它變成開發者預設使用的工具,從源頭就避免介面出問題。